package com.calvin.study.factory;

import com.calvin.study.factory.upgrade1.CourseFactory;
import com.calvin.study.factory.upgrade2.BestCourseFactory;

public class FactoryTest {
	
	/**
	 * @Title: main   
	 * @Description: 
	 * @date: 2021年12月6日 上午10:29:31   
	 * @version:
	 * @param args          
	 * @throws
	 */
	 public static void main(String[] args) {
		//----------------------------------工厂模式的演进----------------------------
		//缺点:随着业务扩展,课程变多,客户端的依赖会变得越来越臃肿.因此需要减弱依赖,把创建的细节隐藏起来.
		//ICourse指向子类JavaCourse的引用
		ICourse course1 = new JavaCourse();
		course1.record();
		
		ICourse course2 = new PythonCourse();
		course2.record();
		//----------------------------------工厂模式的演进end----------------------------
		
		//----------------------------------简单的工厂模式----------------------------
		//缺点:随着课程的增多,每新增可能,需要修改CourseFactory类的代码逻辑.
		CourseFactory simpleFactory = new CourseFactory();
		ICourse course3 = simpleFactory.create("python");
		course3.record();
		//----------------------------------简单的工厂模式end----------------------------

		
		//----------------------------------优化后的工厂模式----------------------------
		//优点:1.客户端无需关注对象实例化过程,一切交由工厂创建,要什么给什么.课程增多,只需要添加该课程的实现类即可.
		ICourse course4 = BestCourseFactory.create(JavaCourse.class);
		course4.record();
		
		//----------------------------------优化后的工厂模式---------------------------
	}

}
